package server.gui;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import javax.swing.JTextField;
import javax.swing.JTextPane;
import javax.swing.border.EmptyBorder;

import model.Usuario;
import server.services.PenalizacionesService;
import server.services.UsuarioService;

@SuppressWarnings("serial")
public class PantallaPenalizacion extends JFrame {

	private JPanel contentPane;
	private PenalizacionesService penalizacionService;
	private UsuarioService usuarioService;
	private JTextField txtDuracion;
	private JList<Usuario> listUsuariosAPenalizar;
	private JTextPane textPaneRazonPenalizacion;
	
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					PantallaPenalizacion frame = new PantallaPenalizacion();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public PantallaPenalizacion() {
		penalizacionService = new PenalizacionesService();
		usuarioService = new UsuarioService();
		
		setTitle("Penalizar a...");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JButton btnPenalizar = new JButton("Penalizar");
		btnPenalizar.setFont(new Font("Tahoma", Font.PLAIN, 14));
		btnPenalizar.setBounds(20, 219, 133, 32);
		btnPenalizar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				penalizar();
			}
		});
		contentPane.add(btnPenalizar);
		
		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setBounds(320, 228, 90, 23);
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				cancelar();
			}
		});
		contentPane.add(btnCancelar);
		
		JLabel lblUsuarioAPenalizar = new JLabel("Usuarios a penalizar");
		lblUsuarioAPenalizar.setFont(new Font("Tahoma", Font.PLAIN, 14));
		lblUsuarioAPenalizar.setBounds(20, 11, 157, 23);
		contentPane.add(lblUsuarioAPenalizar);
		
		Vector<Usuario> vector = null;
		try {
			vector = new Vector(usuarioService.todos());
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(this, "No se pudo traer a los usuarios conectados\n" + e.getMessage());
		}
		
		listUsuariosAPenalizar = new JList<Usuario>(vector);
		listUsuariosAPenalizar.setBounds(20, 45, 133, 144);
		contentPane.add(listUsuariosAPenalizar);
		
		JLabel lblDuracinDePenalizacin = new JLabel("Duraci\u00F3n de penalizaci\u00F3n (En días)");
		lblDuracinDePenalizacin.setBounds(198, 30, 202, 14);
		contentPane.add(lblDuracinDePenalizacin);
		
		txtDuracion = new JTextField();
		txtDuracion.setBounds(198, 55, 212, 20);
		contentPane.add(txtDuracion);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(183, 98, 241, 23);
		contentPane.add(separator);
		
		JLabel lblRazonDePenalizacin = new JLabel("Razon de penalizaci\u00F3n");
		lblRazonDePenalizacin.setBounds(198, 116, 133, 14);
		contentPane.add(lblRazonDePenalizacin);
		
		textPaneRazonPenalizacion = new JTextPane();
		textPaneRazonPenalizacion.setBounds(198, 141, 212, 48);
		contentPane.add(textPaneRazonPenalizacion);
	}
	
	private void cancelar() {
		this.dispose();
	}
	
	private void penalizar() {
		try {
			String motivo = textPaneRazonPenalizacion.getText();
			int dias = Integer.valueOf(txtDuracion.getText());
			List<Usuario> usuarios = listUsuariosAPenalizar.getSelectedValuesList();
			
			for(Usuario usuario : usuarios)
				penalizacionService.penalizar(usuario, motivo, dias);
		} catch (Exception e) {
			JOptionPane.showMessageDialog(this, 
										 "No se pudo penalizar al usuario\n" + e.getMessage(), 
										 "Error", 
										 JOptionPane.ERROR_MESSAGE);
			e.printStackTrace();
		}
	}
}
